apiVersion: apps/v1
kind: Deployment
metadata:
name: golang-web-app
spec:
replicas: 1
selector:
matchLabels:
app: golang-web-app
template:
metadata:
labels:
app: golang-web-app
spec:
containers:
- name: golang-web-app
image: ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: golang-web-app-service
spec:
selector:
app: golang-web-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: NodePort
stages:
- build
- deploy
variables:
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: ""
build:
stage: build
image: docker:20.10.16
services:
- docker:20.10.16-dind
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
deploy:
stage: deploy
image:
name: bitnami/kubectl:latest
entrypoint: ['']
script:
- kubectl config set-cluster k8s --server="${K8S_SERVER}"
- kubectl config set clusters.k8s.certificate-authority-data ${K8S_CERTIFICATE_AUTHORITY_DATA}
- kubectl config set-credentials gitlab --token="${K8S_TOKEN}"
- kubectl config set-context default --cluster=k8s --user=gitlab
- kubectl config use-context default
- sed -i "s|${CI_REGISTRY_IMAGE}|${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}|g" deployment.yaml
- kubectl apply -f deployment.yaml
確保您的 GitLab 項目中包含上述所有文件。
在 GitLab 項目的設置中配置以下環境變量:
CI_REGISTRY
: GitLab 容器倉庫的 URLCI_REGISTRY_USER
: GitLab 倉庫的用戶名CI_REGISTRY_PASSWORD
: GitLab 倉庫的密碼K8S_SERVER
: Kubernetes API 服務器地址K8S_CERTIFICATE_AUTHORITY_DATA
: Kubernetes 集群的 CA 證書數據K8S_TOKEN
: 用於訪問 Kubernetes 集群的服務帳號令牌將代碼推送到 GitLab 倉庫。GitLab CI 將自動執行構建和部署流程。
監控 GitLab CI/CD 流水線的執行情況。
部署完成後,可以使用以下命令驗證部署:
kubectl get pods
kubectl get services
要訪問應用,獲取 NodePort:
kubectl get services golang-web-app-service
然後使用任一集群節點的 IP 和分配的 NodePort 訪問應用。
如果在部署過程中遇到任何問題,請檢查 GitLab CI/CD 日誌以獲取詳細信息,並確保所有必要的權限和配置都已正確設置。